perm filename GETINF.FAI[MUS,LCS] blob
sn#319847 filedate 1977-12-06 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 ******** THIS IS IRCAM VERSION ******
C00011 ENDMK
C⊗;
; ******** THIS IS IRCAM VERSION ******
;****** THIS IS FOR READING SOUND SAMPLE FILES INTO THE MUSIC PROGRAM.
;****** A FILE CALLED 'READ[MUS,LCS]' MUST BE ENTERED INTO 'MUS10' IN
;****** ORDER TO USE THIS FEATURE. SEE 'USEMUS.LCS[UP,DOC]' FOR INFO.
TITLE GETINF ; ********* MAY 1977 *********
INTERNAL GETINF,RDSMPL,getin2,getin3,getin4,rdsmp2,rdsmp3,rdsmp4
;; ENTRY NOTDD
EXTERNAL INFILE,INFIL2,INFIL3,INFIL4
EXTERNAL AIVECT;This routine forces the display routines to be loaded.
ch1←11 ;CAN READ 4 FILES AT ONCE
ch2←12
CH3←13
ch4←14
DEFINE ERROR (MSG)
< JSA 16,.ERROR
JUMP [ASCIZ/MSG/
]
>
;CALL GETINF(ARRAY J,INBT,INDR)
GETINF: 0 ;************ INITS FILE AND READS HEADER
INIT CH1,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
jfcl
MOVE 0,INFILE ;GET INPUT FILE NAME
PUSHj 17,intf4
LOOKUP CH1,DIR
OUTSTR [ASCIZ/**** INPUT FILE NOT FOUND ****/]
PUSHJ 17,GETF3
INPUT CH1,COM
STATZ CH1,740000
0
JRST GETHD
GETIN2: 0
INIT CH2,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
jfcl
MOVE 0,INFIL2 ;GET INPUT FILE NAME 2
PUSHj 17,intf4
LOOKUP CH2,DIR
OUTSTR [ASCIZ/**** INPUT FILE NOT FOUND ****/]
PUSHJ 17,GETF3
INPUT CH2,COM
STATZ CH2,740000
0
JRST GETHD
GETIN3: 0
INIT CH3,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
jfcl
MOVE 0,INFIL3 ;GET INPUT FILE NAME 3
PUSHj 17,intf4
LOOKUP CH3,DIR
OUTSTR [ASCIZ/**** INPUT FILE NOT FOUND ****/]
PUSHJ 17,GETF3
INPUT CH3,COM
STATZ CH3,740000
0
JRST GETHD
GETIN4: 0
INIT CH4,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
jfcl
MOVE 0,INFIL4 ;GET INPUT FILE NAME 4
PUSHj 17,intf4
LOOKUP CH4,DIR
OUTSTR [ASCIZ/**** INPUT FILE NOT FOUND ****/]
PUSHJ 17,GETF3
INPUT CH4,COM
STATZ CH4,740000
0
GETHD: MOVE 2,COM ;LOCATION OF INPUT ARRAY
HRRZ 0,2(2) ;SECOND WD OF ARRAY = SRATE
FLTR 0,0
MOVEM 0,@1(16) ;INSR = SRATE
HRRZ 0,3(2)
FLTR 0,0
MOVEM 0,@2(16) ;INBT BITS 0=12, 1=18
FLTR 0,4(2)
MOVEM 0,@3(16) ;INCH NCHNS
;; FLTR 0,5(2)
MOVE 0,5(2)
;;; CAML 0,[=500000] ;IS IT FLOATING?
;;; KIFIX 0,0 ; YES, FIX IT.
MOVEM 0,@4(16) ;INMX MAXAMPL
FLTR 0,6(2) ;LOOK FOR SAMPLE COUNT IN 6TH WD.
JUMPN 0,SMPLS ;IF ZERO THEN FIGURE IT FROM WDCNT
;;; MOVE 0,DIR+5 ;IRCAM WDCNT
MOVS 0,DIR+3
MOVNS 0 ;GETS THE WDCNT AT STANFORD
SUBI 0,=128 ;SUBTRACT HEADER LENGTH
MOVEI 1,3
SKIPE @2(16) ; BITS, 0 OR 1?
SOJ 1, ; BITS = 1, CHANGE MULTIPLIER TO 2
IMUL 0,1
FLTR 0,0
SMPLS: MOVEM 0,@5(16) ;INDR SAMPLE COUNT
JRA 16,6(16)
;;INTF4: MOVE 0,INFILE
INTF4: MOVEM 0,FILNAM#
MOVE 1,[POINT 7,@FILNAM]
INTF3: MOVE 2,[POINT 6,DIR]
SETZM DIR
;;INTF3: MOVE 2,[POINT 6,DIR+2] ;THIS FOR IRCAM
;; SETZM DIR+2
MOVEI 3,5 ;****** 5-LETTER NAMES ONLY FOR NOW ********
INTF1: ILDB 0,1
JUMPE 0,INTF2
CAIN 0," "
JRST INTF2
SUBI 0,40
IDPB 0,2
SOJG 3,INTF1
INTF2: MOVE 0,[SIXBIT/SND/] ;SND IS ONLY ACCEPTABLE EXTENSION.
MOVEM 0,DIR+1
SETZM DIR+2
SETZM DIR+3 ;ZERO THESE SO PPN IS OK ON RERUNS.
;; MOVEM 0,DIR+3 ; FOR IRCAM
;; SETZM DIR+4
;; SETZM DIR+1
POPJ 17,
GETF3: HRRZ 0,0(16)
SUBI 0,1
MOVEM 0,COM
MOVNI 0,=128
HRLM 0,COM
POPJ 17,
DIR: 5
BLOCK 5
;CALL RDSMPL(<ARRAY>,BITS) BITS=1536(12-BIT) OR 1024(18-BIT)
RDSMPL: 0 ;************** READS THE SAMPLES
PUSHJ 17,SETCOM
INPUT CH1,COM
STATZ CH1,740000
0
JRST RDARY
RDSMP2: 0
PUSHJ 17,SETCOM
INPUT CH2,COM
STATZ CH2,740000
0
JRST RDARY
RDSMP3: 0
PUSHJ 17,SETCOM
INPUT CH3,COM
STATZ CH3,740000
0
JRST RDARY
RDSMP4: 0
PUSHJ 17,SETCOM
INPUT CH4,COM
STATZ CH4,740000
0
RDARY: SETZ 5, ;THE COUNTER
MOVE 1,(16) ;FIRST LOCATION OF ARRAY
;; MOVE 6,INARY ;1025TH LOC OF ARRAY (LAST 1/3)
KIFIX 0,@1(16) ;BITS, 0 OR 1
MOVEI 4,3 ;12-BIT
SUB 4,0 ; 18-BIT IF AC ZERO IS 1
UNPAC: AOJ 6, ;MOVE INPUT POINTER
MOVE 2,(6) ;BEGINNING OF LOOP
JUMPN 0,HALFWD ;JUMP IF 18-BIT
LSHC 2,-14 ; FOR 12 BIT
ASH 3,-30
FLTR 3,3 ;ALL SAMPLES MUST BE IN FLOATING POINT.
MOVEM 3,2(1)
LSHC 2,-14
ASH 3,-30
FLTR 3,3 ;ALL SAMPLES MUST BE IN FLOATING POINT.
MOVEM 3,1(1)
LSHC 2,-14
ASH 3,-30
FLTR 3,3 ;ALL SAMPLES MUST BE IN FLOATING POINT.
MOVEM 3,(1)
JRST UPCNT
HALFWD: HLRE 3,2 ; GET LEFT HALF (1ST SAMPLE)
FLTR 3,3
MOVEM 3,(1)
;; MOVEM 3,1(1)
HRRE 3,2 ; GET RIGHT HALF - 2ND SMPL
FLTR 3,3 ; HRRE THE 'E'=EXTEND - KEEPS RIGHT SIGN.
MOVEM 3,1(1)
UPCNT: ADD 1,4 ;MOVE UP ARRAY POINTER 2 OR 3
CAIE 5,=511
AOJA 5,UNPAC ;GO BACK FOR MORE
JRA 16,2(16)
SETCOM: HRRZ 6,0(16)
ADDI 6,=1023 ;READ 512 WDS INTO LAST 1/3 OF 1536 WD ARRAY.
MOVEM 6,COM
;; MOVEM 0,INARY# ;POINTS TO START OF INPUT
MOVNI 0,=512
HRLM 0,COM
SETZM COM+1
POPJ 17,
COM: OCT 0,0
.ERROR: 0
OUTSTR [ASCIZ/?
/] ;MAKE SURE HE CAN SEE HIS ERROR
OUTSTR @(16) ;OUTPUT ERROR MESSAGE
CALLI 1,12 ;LET USER CONTINUE
JRA 16,1(16)
;FUNCTION NOTDD(K) -- IF NEG. IT'S NOT A DATADISC -- FOR 'SEE'
;;NOTDD↑: 0
;; MOVNI 2,1
;; GETLIN 2
;; SETZ ;0=IT IS A DD
;; TLNN 2,20000
;; SETO ;-1=NOT DD
;; JRA 16,1(16)
END